从这篇开始,我们来谈谈 ASP.Net MVC,我们将会介绍 ASP.Net MVC 的方方面面(包括基础以及高级特性)。
MVC 架构
MVC 架构以及在软件工程出现很长时间了,几乎所有语言都有 MVC 以及变种形式。
iOS 中的 MVC
图中绿色箭头表示直接引用,只有 Controller 直接持有 Model 和 View 的引用,
View 向 Controller 的通信有三种形式:
- target-action
- delegate
- data source
Model 向 Controller 的通信则通过 Notification & KVO。
在 iOS 的 MVC 严格实现中,Model 和 View 是绝对不能直接通信的,即互相之间不能持有对方。这也是区别于 Android 和 .Net 最大的地方。
虽然耦合度会减少,但是会造成 Controller 巨大,这也是现在 MVVM,MVP 等其他架构出现的原因。
.Net 中的 MVC
下面我们在具体看看 .Net MVC 是怎样实现的。
MVC 中:
- M 指的就是 Model: 它是一种数据以及业务逻辑
- V 指的就是 View: 它是用户界面,利用模型展示界面给用户,也允许用户修改数据
- C 指的就是 Controller: 它可以处理用户请求,通常,用户与界面交互,发起一个网络请求,这个请求就被 Controller 处理,利用模型数据渲染恰当的界面作为响应
在 .Net 中的 MVC,Model 会从 Controller 传递给 View。
ASP.Net MVC 历史版本
MVC 1.0 特性
- 使用 WebForm 引擎
- 路由
- HTML Helpers
- Ajax Helpers
MVC 2.0 特性
- Area
- 异步 Controller
- 客户端验证
- 自定义模板
MVC 3.0 特性
- Razor 视图引擎
- Global filters
- 远程验证
- ViewBag
MVC 4.0 特性
- Bundling 和 minification
MVC 5.0 特性
- Authentication filters
- 支持 Bootstrap
- ASP.Net Identity
MVC 5.2 特性
- Attribute based routing
注意: MVC 5 项目 默认包含 bootstrap 3.0 的 css 和 js 文件.
ASP.Net MVC 项目文件夹结构
App_Data
App_Data 文件夹可以容纳 localDB,XML,日志文件等应用数据文件。
App_Start
App_Start 文件夹当程序已启动就会被执行的类文件。例如: AuthConfig.cs,BundleConfig.cs,FilterConfig.cs,RouteConfig.cs 等。
在 MVC 5 默认包含 BundleConfig.cs,FilterConfig.cs 以及 RouteConfig.cs 三个配置类文件。
Content
Content 文件夹容纳静态文件如 css,image 以及 favicon 等。在 MVC 5 默认包含 bootstrap.css,bootstrap.min.css 以及 Site.css 文件。
Controller
Controller 文件夹容纳 controller 类文件,MVC 要求 controller 文件名以 Controller 结尾
fonts
fonts 文件夹容纳自定义字体文件。
Models
Models 文件夹容纳模型类文件。
Scripts
Scripts 文件夹容纳 JavaScript 文件。MVC 5 默认包含 bootstrap,jquery3.3.1 以及 modernizr2.8.3。
Views
Views 文件夹容纳应用的 html 文件以 .cshtml 作为后缀。.cshtml 文件允许你同时写 C# 代码和 html 标签。
Views 文件夹包含每个控制器的单独的文件夹,例如 HomeController 对于 Views/Home 文件夹。
Shared 文件夹用来容纳不同控制器共享的视图。如: _Layout.cshtml。
Global.asax
Global.asax 允许编写应用级事件,如: Application_BeginRequest,Application_Start,Application_Error,Session_Start,Session_End 等。
Packages.config
NuGet 的包管理文件。
Web.config
Web.config 包含应用级的配置。